//封装mui基础库文件
(function() {
	window.baseMui = {
		var packageName; //当前应用的APPID
		var version;     //当前本地版本
		/*****************************************************************************
		 * 
		 * 
		 * 封装类型初始化
		 * 
		 * ***************************************************************************/
		init: function(packageName) {
			mui.plusReady(function() {
				//获取应用的APPID
				if(packageName) {
					localStorage.setItem('packageName', packageName);
					packageName = packageName;
				} else {
					packageName = localStorage.getItem('packageName');
					if(packageName == null) {
						packageName = plus.runtime.appid;
					}
				};
				//本地版本
				version = plus.runtime.version;
			})
		},
		/*****************************************************************************
		 * 
		 * 
		 * 获取元素对象的封装
		 * 
		 * ***************************************************************************/
		/**
		 * 根据元素id获取对象
		 * @param {Object} id_element 元素ID
		 */
		id: function(id_element) {
			return document.getElementById(id_element);
		},
		/**
		 * 根据元素名称获取对象
		 * @param {Object} parentElement 父级元素
		 * @param {Object} classElement 元素名称
		 */
		className: function(parentElement, classElement) {
			if(classElement == undefined) {
				return document.getElementsByClassName(parentElement);
			}
			return parentElement.getElementsByClassName(classElement);
		},
		/**
		 * 根据标签获取对象
		 * @param {Object} parentElement 父级元素
		 * @param {Object} tagElement 标签名称
		 */
		tagName: function(parentElement, tagElement) {
			if(tagElement == undefined) {
				return document.getElementsByTagName(parentElement);
			}
			return parentElement.getElementsByTagName(tagElement);
		},
		/*****************************************************************************
		 * 
		 * 
		 * 获取设备信息类的封装
		 * 
		 * ***************************************************************************/
		/**
		 * 设备信息
		 * @param {Object} callback
		 */
		getDeviceinfo: function(callback) {
			mui.plusReady(function() {
				var json = {};
				json.model = plus.device.model;
				json.vendor = plus.device.vendor;
				json.imei = plus.device.imei;
				json.uuid = plus.device.uuid;
				var str = '';
				for(i = 0; i < plus.device.imsi.length; i++) {
					str += plus.device.imsi[i];
				}
				json.imsi = str;
				json.resolution = plus.screen.resolutionWidth * plus.screen.scale + " x " + plus.screen.resolutionHeight * plus.screen.scale;
				json.pixel = plus.screen.dpiX + " x " + plus.screen.dpiY;
				callback(json);
			});
		},
		/**
		 * 获取设备信息
		 * @param {Object} callback
		 */
		getMachineinfo: function(callback) {
			mui.plusReady(function() {
				var json = {};
				json.name = plus.os.name;
				json.version = plus.os.version;
				json.language = plus.os.language;
				json.vendor = plus.os.vendor;
				var types = {};
				types[plus.networkinfo.CONNECTION_UNKNOW] = "未知";
				types[plus.networkinfo.CONNECTION_NONE] = "未连接网络";
				types[plus.networkinfo.CONNECTION_ETHERNET] = "有线网络";
				types[plus.networkinfo.CONNECTION_WIFI] = "WiFi网络";
				types[plus.networkinfo.CONNECTION_CELL2G] = "2G蜂窝网络";
				types[plus.networkinfo.CONNECTION_CELL3G] = "3G蜂窝网络";
				types[plus.networkinfo.CONNECTION_CELL4G] = "4G蜂窝网络";
				json.network = types[plus.networkinfo.getCurrentType()];
				callback(json);
			});
		},
		/**
		 * 获取屏幕的宽度和高度  默认获取宽度
		 * @param {Object} element
		 */
		getScreenInfo: function(element) {
			var element = element ? undefined : 'width';
			if(element == 'width') {
				return document.documentElement.clientWidth || document.body.clientWidth;
			} else {
				return document.documentElement.clientHeight || document.body.clientHeigth;
			}
		},
		/*****************************************************************************
		 * 
		 * 
		 * 功能类的封装
		 * 
		 * ***************************************************************************/
		/**
		 * 蜂鸣提示音
		 */
		beep: function() {
			mui.plusReady(function() {
				switch(plus.os.name) {
					case "iOS":
						if(plus.device.model.indexOf("iPhone") >= 0) {
							plus.device.beep();
						} else {
							baseMui.toast('此设备不支持蜂鸣');
						}
						break;
					default:
						plus.device.beep();
						break;
				}
			});
		},
		/** 
		 * 手机震动
		 */
		vibrate: function() {
			mui.plusReady(function() {
				switch(plus.os.name) {
					case "iOS":
						if(plus.device.model.indexOf("iPhone") >= 0) {
							plus.device.vibrate();
						} else {
							baseMui.toast('此设备不支持震动');
						}
						break;
					default:
						plus.device.vibrate();
						break;
				}
			});
		},
		/**
		 * 打电话
		 * @param {Object} targetPhone
		 */
		callPhone: function(targetPhone) {
			plus.device.dial(targetPhone, false);
		},
		/**
		 * 发送短信
		 * @param {Object} sendPhone 手机号号码 为一个数据
		 * @param {Object} sendContent 短信内容
		 */
		sendSms: function(sendPhone, sendContent) {
			if(typeof(sendPhone) === 'string') {
				sendPhone = [sendPhone];
			}
			var msg = plus.messaging.createMessage(plus.messaging.TYPE_SMS);
			msg.to = sendPhone;
			msg.body = sendContent;
			plus.messaging.sendMessage(msg);
		},
		/**
		 * 双击退出应用
		 */
		clickExit: function() {
			var first = null;
			mui.back = function() {
				if(!first) {
					first = new Date().getTime();
					baseMui.toast('再按一次退出应用')
					setTimeout(function() {
						baseMui.clickExit();
					}, 1000);
				} else {
					if(new Date().getTime() - first < 1000) {
						plus.runtime.quit();
					}
				}
			}
		},
		/**
		 * 打开外部链接
		 * @param {Object} targetUrl
		 */
		openUrl: function(targetUrl) {
			plus.runtime.openURL(targetUrl)
		},
		/**
		 * 设置缓存
		 * @param {Object} name
		 * @param {Object} value
		 */
		setItem: function(name, value) {
			localStorage.setItem(name, value);
		},
		/**
		 * 读取缓存
		 * @param {Object} name
		 */
		getItem: function(name) {
			localStorage.getItem(name);
		},
		/**
		 * 删除本地缓存
		 * @param {Object} name
		 */
		removeItem: function(name) {
			localStorage.removeItem(name);
		},
		/**
		 * 清除本地缓存
		 */
		clearItem: function() {
			localStorage.clear();
		},
		/*****************************************************************************
		 * 
		 * 
		 * 提示消息类的封装
		 * 
		 * ***************************************************************************/
		/**
		 * 消息提示框
		 * @param {Object} content 提示内容
		 * @param {Object} time    显示时间
		 * @param {Object} div     显示的样式
		 */
		toast: function(content, time, div) {
			var time = time ? undefined : 'long';
			var div = div ? undefined : 'div';
			mui.toast(content, {
				duration: time,
				type: 'div'
			});
		},
		/**
		 * 警告框
		 * @param {Object} jsonData  {jsonData.content, jsonData.title,jsonData.callback}
		 * @param {Object} jsonData.content 内容  
		 * @param {Object} jsonData.title 标题
		 * @param {Object} jsonData.callback 回调内容
		 */
		alert: function(jsonData) {
			mui.alert(jsonData.content, jsonData.title, function() {
				jsonData.callback && jsonData.callback();
			});
		},
		/**
		 * 确认框  
		 * @param {Object} jsonData 确定框传入的对象 {jsonData.content, jsonData.title,jsonData.btnArray,jsonData.successcallback,jsonData.failcallback}
		 * @param {Object} jsonData.content 内容  
		 * @param {Object} jsonData.title 标题
		 * @param {Object} jsonData.btnArray 按钮数组
		 * @param {Object} jsonData.successcallback 成功回调
		 * @param {Object} jsonData.failcallback    失败回调
		 */
		confirm: function(jsonData) {
			var btnArray = jsonData.btnArr ? undefined : ['确定', '取消'];
			mui.confirm(jsonData.content, jsonData.title, btnArray, function(e) {
				if(e.index == 0) {
					jsonData.successcallback && jsonData.successcallback(true);
				} else {
					jsonData.failcallback && jsonData.failcallback(false);
				}
			});
		},
		/**
		 * 输入对话框
		 * @param {Object} jsonData 
		 * @param {Object} jsonData.content 内容  
		 * @param {Object} jsonData.title 标题
		 * @param {Object} jsonData.placeholder input框提示语
		 * @param {Object} jsonData.btnArray 按钮数组
		 * @param {Object} jsonData.successcallback 成功回调
		 * @param {Object} jsonData.failcallback    失败回调
		 */
		prompt: function(jsonData) {
			var btnArray = jsonData.btnArr ? undefined : ['确定', '取消'];
			var placeholder = jsonData.placeholder ? undefined : '';
			mui.prompt(jsonData.content, placeholder, jsonData.title, btnArray, function(e) {
				if(e.index == 0) {
					jsonData.successcallback && jsonData.successcallback(e.value);
				} else {
					jsonData.failcallback && jsonData.failcallback(false);
				}
			});
		},
		/*****************************************************************************
		 * 
		 * 
		 * ajax类的封装
		 * 
		 * ***************************************************************************/
		/**
		 * ajax get请求
		 * @param {Object} url 请求Url
		 * @param {Object} data   参数-Json格式
		 * @param {Object} succFn     回调
		 */
		get: function(jsonData) {
			baseMui.ajax({
				url: jsonData.url,
				data: jsonData.data,
				succFn: jsonData.succFn,
				type: 'get'
			});
		},
		/**
		 * Ajax - post 请求
		 * @param {Object} url 请求Url
		 * @param {Object} data   参数-Json格式
		 * @param {Object} succFn     回调
		 */
		post: function(jsonData) {
			baseMui.ajax({
				url: jsonData.url,
				data: jsonData.data,
				succFn: jsonData.succFn,
				type: 'post'
			});
		},
		/**
		 * Ajax 请求
		 * @param {Object} json
		 */
		ajax: function(json) {
			var timer = null;
			json = json || {};
			if(!json.url) {
				baseMui,
				toast('请求地址不存在');
				return;
			}
			json.type = json.type || 'get'; //请求方式
			json.time = json.time || 10; //超时时间
			json.data = json.data || {}; //请求数据
			if(window.XMLHttpRequest) { //兼容IE浏览器
				var oAjax = new XMLHttpRequest();
			} else {
				var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
			}
			switch(json.type.toLowerCase()) {
				case 'get':
					oAjax.open('GET', json.url + '?' + baseMui.ajaxtool(json.data), true);
					oAjax.send();
					break;
				case 'post':
					oAjax.open('POST', json.url, true);
					oAjax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
					oAjax.send(baseMui.ajaxtool(json.data));
					break;
			}
			oAjax.onreadystatechange = function() {
				if(oAjax.readyState == 4) {
					if(oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) {
						clearTimeout(timer);
						json.succFn && json.succFn(oAjax.responseText);
					} else {
						clearTimeout(timer);
						json.errFn && json.errFn(oAjax.status);
					}
				}
			}
			timer = setTimeout(function() {
				baseMui.toast('网络超时');
				oAjax.onreadystatechange = null;
			}, json.time * 1000);
		},
		/**
		 * 格式化URL参数
		 * @param {Object} json
		 */
		ajaxtool: function(json) {
			json.t = Math.random();
			json.package_name_data = packageName;
			var arr = [];
			for(var name in json) {
				arr.push(name + '=' + json[name]);
			}
			return arr.join('&');
		},
	};
})()